# ----------------------------------------------------------- 补充：列表的sort排序方法

# my_list =[["a",33],["b",55],["c",11]]
# # 排序，基于带名函数
# # def choose_sort_key(elemen):
# #     return elemen[1]
# # my_list.sort(key= choose_sort_key,reverse=True )
# # print(my_list)
# # 排序，基于lambda匿名函数
# my_list.sort(key = lambda elemen: elemen[1],reverse = True )
# # print(my_list)

# TODO 全国GDP前八

from pyecharts.charts import Timeline, Bar, Timeline
from pyecharts.options import *
from pyecharts.globals import ThemeType

f = open("E:/excel学习文档-表格/黑马-可视化案例数据/动态柱状图-1960-2019全球GDP数据.csv", 'r', encoding = "ANSI")
lines = f.readlines()
f.close()
# 删除第一条数据
lines.pop(0)
print(lines)

# 将数据转换成字典存储，格式为：
# {1960：[[美国，123],[中国，321],....],1961:[[美国，123],[中国，321],..]
my_dict = {}
for line in lines:
   year = int(line.split(",")[0])    # 年份
   country = line.split(",")[1]      # 国家
   gdp = float(line.split(",")[2])   # gdp数据
   # print(line)


   # TODO 如何判断字典里面有没有指定的key
   try:
       my_dict[year].append([country,gdp])
   except KeyError :
       my_dict[year] = []
       my_dict[year].append([country, gdp])

       # print(my_dict)


# 创建时间线对象
timeline =Timeline()

# 排序年份
sorted_year_list = sorted(my_dict.keys())
print(sorted_year_list)

# 按照年份对所有国家的gdp排序
for year in sorted_year_list:
    my_dict[year].sort(key = lambda elemen : elemen[1],reverse = True)
    # print(my_dict)
    # print(year)
    # 取每一年的gdp为前8的数据
    year_data = my_dict[year][0:8]
    # print(year_data)
    x_data = []
    y_data = []
    for country_gdp in year_data:
        country = country_gdp[0]
        gdp = (country_gdp[1] / 100000000)
        x_data.append(country)
        y_data.append(gdp)
    # print(x_data)
    # print(y_data)

    # 构建柱状图
    # for循环每一年的数据，基于每一年的数据，创建每一年的bar对象
    bar = Bar()
    bar.add_xaxis(x_data)
    bar.add_yaxis("GDP(亿)",y_data,label_opts = LabelOpts(position = "right"))
    # 反转x轴和y轴
    bar.reversal_axis()

    timeline.add(bar,str(year))
    # print(f"222:{str(year)}")
    # 设置每一年的图表标题
    # print(year)
    bar.set_global_opts(
        title_opts = TitleOpts(title = f"{year}年全球前8的GDP数据")
    )


    # print(f"aaa:{year}")


# 设置时间线自动播放
timeline.add_schema(
    is_timeline_show = True,
    play_interval = 1000,
    is_auto_play = True,
    is_loop_play = False
)
timeline.render("全国GDP排名前8的动态柱状图.html")